#pragma once

#include"noncopyable.h"
#include "EventLoop.h"
#include"InetAddress.h"
#include"Socket.h"
#include"Channel.h"

#include<functional>

class Acceptor
{
public:
    using NewConnectionCallback = std::function<void(int sockfd, const InetAddress&)>;
    Acceptor(EventLoop* loop, const InetAddress &listenAddr, bool reuseport);
    ~Acceptor();

    void setNewConnectionCallback(const NewConnectionCallback &cb)
    {
        newConnectionCallback_ = cb; 
    }

    bool Listenning(){return listenning_;}
    void listen();
private:
    void handleRead();

    EventLoop* loop_; //acceptor 用的baseloop
    Socket acceptSocket_;
    Channel acceptChannel_;
    NewConnectionCallback newConnectionCallback_;
    bool listenning_;

    
};